import os
from dotenv import load_dotenv
from py2neo import Graph, Node, NodeMatcher, Relationship, Subgraph
from utils.printMessage import (
    logMessage
)
# 加载 .env 文件中的环境变量
load_dotenv()
# 使用 os.getenv 获取环境变量的值
database_url = os.getenv("DATABASE_URL")
database_user = os.getenv("DATABASE_USER")
database_password = os.getenv("DATABASE_PASSWORD")
# 连接函数
def connect():
    try:
        graph = Graph(database_url, auth=(database_user, database_password), name="neo4j")
        logMessage("数据库连接成功")
    except:
        logMessage("数据库连接失败")
    return graph

'''
新增节点函数
作用：
    将对应的节点内容加载到图数据库中
参数：
    graph: 图数据库对象
    nodeType: 节点的类型
    attr/attrsList: 节点的（属性/属性列表 ）p
'''
# 新增单个节点
def addNodeByTx(tx, nodeType, attr, nodeName):
    node = Node(nodeType, **attr, nodeName=nodeName)
    tx.create(node)
    return node

# 新增多个节点
def addNodes(graph, nodeType, attrsList, nodeName):
    # 事务开始
    tx = graph.begin()
    nodes = []
    for attrs in attrsList:
        node = Node(nodeType, **attrs, nodeName=nodeName)
        nodes.append(node)
        tx.create(node)
    # 执行
    tx.commit()
    return nodes


# 清除所有的节点
def deleteAllNodes():
    graph = connect()
    # 执行Cypher查询以删除所有节点
    query = "MATCH (n) DETACH DELETE n"
    graph.run(query)